#include "Jy61p.h"

struct StcAngle SAngle;
struct StcGyro  SGyro;
struct StcAcc   SAcc;

//volatile  uint16_t Data = 0 ;

void Jy61p_Init(void)
{
    //清除串口中断标志
    NVIC_ClearPendingIRQ(JY61P_INST_INT_IRQN);
    //使能串口中断
    NVIC_EnableIRQ(JY61P_INST_INT_IRQN);
}

//JY61串口中断函数
void UART1_IRQHandler(void)
{
   //如果产生了串口中断
    switch( DL_UART_getPendingInterrupt(JY61P_INST))
    {
        uint16_t Data = 0 ;
        case DL_UART_IIDX_RX://如果是接收中断
            //将发送过来的数据保存在变量中
            Data = DL_UART_Main_receiveData(JY61P_INST);
            Get_Jy61(Data);
            break;

        default://其他的串口中断
            break;
    }
}

/***********采集JY61P数据**************/
void Get_Jy61(uint16_t Data)
{
    static uint8_t RX_Data[250];
    static uint8_t len = 0;
    RX_Data[len++]=Data;    //将收到的数据存入缓冲区中
    if (RX_Data[0]!=0x55) //数据头不对，则重新开始寻找0x55数据头
    {
        len=0;
        return;
    }
    if (len<11) return;//数据不满11个，则返回
    else
    {
     switch(RX_Data[1])//判断数据是哪种数据，然后将其拷贝到对应的结构体中，有些数据包需要通过上位机打开对应的输出后，才能接收到这个数据包的数据
     {
        case 0x51:
                        memcpy(&SAcc,&RX_Data[2],8);
                        for(uint8_t j = 0; j < 3; j++)
                            {
                                SAcc.Acc[j] = (float)SAcc.Acc_S[j]/32768*16;
                            }
                        break;
        case 0x52:
                        memcpy(&SGyro,&RX_Data[2],8);
                        for(uint8_t j = 0; j < 3; j++)
                            {
                                SGyro.Gyro[j] = (float)SGyro.Gyro_S[j]/32768*2000;
                            }
                        break;
        case 0x53:
                        memcpy(&SAngle,&RX_Data[2],8);
                        for(uint8_t j = 0; j < 3; j++)
                            {
                               SAngle.Angle[j] = (float)SAngle.Angle_S[j]/32768*180;
                            }
                        break;
     }
     len=0;//清空缓存区
 }
}